#ifndef TESTUTILS_H
#define TESTUTILS_H

#include <string>
#include <cstdlib>
#include "Group.h"
#include "Graph.h"
#include "Chain.h"
#include <map>
#include <vector>

using namespace std;

class TestUtils
{
public:
	enum TestResult { TestFailed, TestPassed };
	static TestResult VerifyIsTrue(bool cond, string message);
	static void PrintTestResult(string scenario, TestResult result);
	// Receives a graph instance and intializes it to a graph on vertices with n=4, w=2
	static Graph& CreateGraph4On2(Graph& graph);
	static Graph* CreateGroupAndGraph6On2(Group& group);
	static Graph* CreateMaximalGroupAndGraph6On2(Group& group);
	static Graph* CreateMinimalGroupAndGraph6On2(Group& group);
	static Chain* CreateBigChain7On2With3Groups(Chain* chain);
	static Chain* CreateAnotherBigChain7On2With3Groups(Chain* chain);
	static Chain* CreateSmallChain7On2With3Groups(Chain* chain);
	static Chain* CreateMixedBigChain7On2With3Groups(Chain* chain);
	static Chain* CreateShortChain7On2With3Groups(Chain* chain);
	static Chain* CreateBigLongChain7On2With3Groups(Chain* chain);
	static Graph* CreateGraphFromDirectory(map<vector<bool>, Vertex*>* vertices, VertexDirectory* dir = NULL);
	static void CreateVertexDirectory(int n, int w);
	static Graph* CreateGraphNOnW(int n, int w);
	static string GetVertexName(vector<bool> name);
};

#endif